home *** CD-ROM | disk | FTP | other *** search
/ Practical Algorithms for Image Analysis / Practical Algorithms for Image Analysis.iso / LIBTIFF / configure < prev    next >
Text File  |  1999-09-11  |  45KB  |  1,801 lines

  1. #!/bin/sh
  2. #    $Header: /usr/people/sam/tiff/RCS/configure,v 1.48 1996/04/26 03:36:20 sam Rel $
  3. #
  4. # Tag Image File Format (TIFF) Software
  5. #
  6. # Copyright (c) 1988-1996 Sam Leffler
  7. # Copyright (c) 1991-1996 Silicon Graphics, Inc.
  8. # Permission to use, copy, modify, distribute, and sell this software and 
  9. # its documentation for any purpose is hereby granted without fee, provided
  10. # that (i) the above copyright notices and this permission notice appear in
  11. # all copies of the software and related documentation, and (ii) the names of
  12. # Sam Leffler and Silicon Graphics may not be used in any advertising or
  13. # publicity relating to the software without the specific, prior written
  14. # permission of Sam Leffler and Silicon Graphics.
  15. # THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
  16. # EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
  17. # WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
  18. # IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
  19. # ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
  20. # OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
  21. # WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
  22. # LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
  23. # OF THIS SOFTWARE.
  24. #
  25.  
  26. # Configuration script for the TIFF Software
  27.  
  28. #
  29. # Shell script to setup machine-dependent files in
  30. # preparation for building TIFF source.
  31. #
  32.  
  33. POSIXLY_CORRECT=1; export POSIXLY_CORRECT    # disable GNU extensions
  34.  
  35. QUIET=no                # suppress messages to tty
  36. NONINTERACTIVE=no            # control prompting of config params
  37. SITE=                    # dir where config.site is located
  38. TARGET=                    # target system identity
  39. SRCDIR=                    # dir where source is located
  40.  
  41. #
  42. # Setup general configuration parameters.
  43. #
  44. DIR_BIN=/usr/local/bin            # destination for applications
  45. DIR_LIB=/usr/local/lib            # destination for library
  46. DIR_INC=/usr/local/include        # destination for include files
  47. DIRS_LIBINC=                # dirs to search for ancillary includes
  48. DIR_JPEGLIB=                # dir for IJG -ljpeg
  49. DIR_GZLIB=                # dir for zlib -lgz
  50. DSO=auto                # auto-enable DSO support
  51. LIBCOPTS=                # library-specific C-compiler options
  52. JPEG=no                    # configure JPEG support
  53. ZIP=no                    # configure ZIP/Deflate support
  54. PORT=auto                # enable portability emulations
  55. LIBGL=auto                # auto-enable build of SGI -lgl apps
  56. LIBIMAGE=auto                # auto-enable build of SGI -limage apps
  57. MACHDEPLIBS=-lm                # machine-dependent libraries for apps
  58. : ${CC=}                # name of C compiler to use
  59. : ${CCOMPILER=}                # full pathname of C compiler
  60. : ${ENVOPTS=}                # CC opts for ANSI C compilation
  61. : ${MAKE=make}                # make to use
  62.  
  63. # screws up the test of `-f -'
  64. : ${MAKEFLAGS=}                # unset MAKEFLAGS
  65. RM="rm -f"
  66.  
  67. #
  68. # Error diagnostics that should go to the terminal are
  69. # done with this interface (or cat).
  70. #
  71. bitch()
  72. {
  73.     echo "configure: $@" 1>&2
  74. }
  75.  
  76. #
  77. # This is the preferred interface for
  78. # configure to terminate abnormally.
  79. #
  80. boom()
  81. {
  82.     bitch ""
  83.     bitch "Unrecoverable error!  Once you've corrected the problem rerun this script."
  84.     kill -1 $$                # use kill so trap handler is called
  85. }
  86.  
  87. usage()
  88. {
  89.     cat<<'EOF'
  90. Usage: configure [options] [host]
  91. Options: [defaults in brackets after descriptions]
  92.   --help                  print this message
  93.   --quiet                 do not print `Using ...' messages
  94.   --verbose          opposite of --quiet
  95.   --noninteractive        don't ask any questions
  96.   --version               print the version of autoconf that created configure
  97.   --target=TARGET         configure for TARGET [TARGET=HOST]
  98.   --srcdir=DIR            find the sources in DIR [configure dir or ..]
  99.   --with-PARAM[=ARG]      set configuration PARAM [ARG=yes]
  100. EOF
  101. }
  102.  
  103. #
  104. # Crack command line arguments.  We purposely
  105. # use syntax and options that are compatible
  106. # with GNU autoconf.
  107. #
  108. ac_prev=
  109. for ac_option
  110. do
  111.     if [ -n "$ac_prev" ]; then        # assign the argument to previous option
  112.     eval "$ac_prev=\$ac_option"
  113.     ac_prev=
  114.     continue
  115.     fi
  116.     case "$ac_option" in        # collect optional argument
  117.     -*=*)    ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'`;;
  118.     *)        ac_optarg=;;
  119.     esac
  120.     case "$ac_option" in
  121.     -with-*|--with-*)
  122.     ac_with=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
  123.     # Reject names that are not valid shell variable names.
  124.     if [ -n "`echo $ac_with| sed 's/[-_a-zA-Z0-9]//g'`" ]; then
  125.         bitch "configure: $ac_with: invalid parameter name."
  126.         kill -1 $$
  127.     fi
  128.     ac_with=`echo $ac_with| sed 's/-/_/g'`
  129.     case "$ac_option" in
  130.     *=*)    ;;
  131.     *)    ac_optarg=yes;;
  132.     esac
  133.     eval "${ac_with}='$ac_optarg'"
  134.     ;;
  135.     -quiet|--quiet)        QUIET=yes;;
  136.     -verbose|--verbose)        QUIET=no;;
  137.     -noninteractive|--noninteractive) NONINTERACTIVE=yes;;
  138.     -site|--site)        ac_prev=SITE;;
  139.     -site=*|--site=*)        SITE="$ac_optarg";;
  140.     -srcdir|--srcdir)        ac_prev=SRCDIR;;
  141.     -srcdir=*|--srcdir=*)    SRCDIR="$ac_optarg";;
  142.     -target|--target)        ac_prev=TARGET;;
  143.     -target=*|--target=*)    TARGET="$ac_optarg" ;;
  144.     -version|--version)
  145.     echo "This is TIFF configure $Revision: 1.48 $"
  146.     exit 0
  147.     ;;
  148.     -help|--help)        usage; exit 0;;
  149.     -*)
  150.     bitch "configure: $ac_option: invalid option; use -help for usage."
  151.     kill -1 $$
  152.     ;;
  153.     *)
  154.     if [ x"$TARGET" != x ]; then
  155.         bitch "configure: Can only configure for one target at a time."
  156.         kill -1 $$
  157.     fi
  158.     TARGET="$ac_option"
  159.     ;;
  160.     esac
  161. done
  162.  
  163. if [ -n "$ac_prev" ]; then
  164.     bitch "configure: missing argument to --`echo $ac_prev | sed 's/_/-/g'`"
  165.     kill -1 $$
  166. fi
  167.  
  168. #
  169. # Locate source directory by looking for the VERSION file.
  170. # The directory must either be specified through the
  171. # environment or be located in the current directory or a
  172. # parent of the current directory.
  173. #
  174. test "$SRCDIR" || {
  175.     configure=$0
  176.     # NB: don't use dirname since it may not exist
  177.     SRCDIR=`echo $configure | sed 's;/[^/][^/]*$;;'`
  178.     if [ @"$SRCDIR" = @"$configure" ]; then
  179.         SRCDIR=.
  180.     fi
  181.     while [ ! -r $SRCDIR/VERSION ]; do
  182.     # strip last directory from pathname
  183.     newdir=`echo $SRCDIR | sed 's;/[^/]*$;;'`
  184.     if [ -z "$newdir" ] || [ "$newdir" = $SRCDIR ]; then
  185.         break;
  186.     fi
  187.     SRCDIR=$newdir
  188.     done
  189. }
  190. if [ ! -r $SRCDIR/VERSION ]; then
  191.     bitch "Cannot locate sources in $SRCDIR."
  192.     kill -1 $$
  193. fi
  194. SRCDIR=`echo "$SRCDIR" | sed 's;\([^/]\)/*$;\1;'`
  195.  
  196. if [ -r ${SRCDIR}/tif_version.c ] ; then
  197.     SRCDIR_IS_LIBTIFF=yes
  198.     PORTDOTH=port.h
  199. else
  200.     SRCDIR_IS_LIBTIFF=no
  201.     PORTDOTH=libtiff/port.h
  202. fi
  203.  
  204. #
  205. # Descriptor usage:
  206. # 1: ???
  207. # 2: errors that should be seen even if we're in the background.
  208. # 3: [stdout from test runs]
  209. # 4: verbose-style messages (Using ...)
  210. # 5: compiler stderr when running tests
  211. #
  212. if [ $QUIET = yes ]; then
  213.     exec 4>/dev/null            # chuck messages
  214. else
  215.     exec 4>&1                # messages got to stdout
  216. fi
  217. exec 5>./config.log            # compiler messages and the like
  218.  
  219. capture()
  220. {
  221.     (eval "set -x; $*") >&5 2>&1
  222.     return
  223. }
  224. captureX()
  225. {
  226.     (eval "set -x; $*") 2>&5
  227.     return
  228. }
  229.  
  230. date >&5
  231. echo Running "$0" with arguments: "$@" >&5
  232.  
  233. cat 1>&5 <<'EOF'
  234.  
  235. This file contains information that is captured from running the configure
  236. script.  Lines that begin with a "+" are command lines echoed by the
  237. shell.  Other lines are the output of commands; usually the contents of
  238. test case files or the output from compilers.  If configure does the
  239. wrong thing, you can use the information captured here to aid in debugging.
  240.  
  241. EOF
  242.  
  243. if [ -r $SRCDIR/tiff.alpha ] ; then
  244.     VERSIONFILE=$SRCDIR/VERSION
  245.     ALPHAFILE=$SRCDIR/tiff.alpha
  246. else
  247.     VERSIONFILE=$SRCDIR/VERSION
  248.     ALPHAFILE=$SRCDIR/dist/tiff.alpha
  249. fi
  250. VERSION="v`cat $VERSIONFILE``awk '{print $3}' $ALPHAFILE`"
  251. DATE=`date`
  252.  
  253. DIST_MAJOR=`echo $VERSION | sed 's/v\([0-9][0-9]*\)\..*/\1/'`
  254. DIST_MINOR=`echo $VERSION | sed 's/v.*\.\([0-9][0-9]*\).*/\1/'`
  255. DIST_ALPHA=`echo $VERSION | sed -e 's/.*beta//' -e 's/.*release//'`
  256.  
  257. Note()
  258. {
  259.     echo "$@" 1>&4
  260. }
  261.  
  262. Note ""
  263. if [ $SRCDIR_IS_LIBTIFF = yes ] ; then
  264.   Note "Configuring TIFF Software (library only) $VERSION."
  265. else
  266.   Note "Configuring TIFF Software $VERSION."
  267. fi
  268.  
  269. Note ""
  270. Note "If configure does the wrong thing, check the file config.log for"
  271. Note "information that may help you understand what went wrong."
  272. Note ""
  273.  
  274. #
  275. # Read site and local configuration parameters.
  276. #
  277. if [ -f $SITE/config.site ]; then
  278.     Note "Reading site-wide parameters from $SITE/config.site."
  279.     . $SITE/config.site
  280.     capture . $SITE/config.site
  281. elif [ -f $SRCDIR/config.site ]; then
  282.     Note "Reading site-wide parameters from $SRCDIR/config.site."
  283.     . $SRCDIR/config.site
  284.     capture . $SRCDIR/config.site
  285. fi
  286. if [ -f config.local ]; then
  287.     Note "Reading local parameters from config.local."
  288.     . ./config.local
  289.     capture . ./config.local
  290. elif [ -f $SRCDIR/config.local ]; then
  291.     Note "Reading local parameters from $SRCDIR/config.local."
  292.     . $SRCDIR/config.local
  293.     capture . $SRCDIR/config.local
  294. fi
  295.  
  296. #
  297. # Emulate old-style settups...
  298. #
  299. test -z "${DIR_JPEG-}"  || {
  300.     DIRS_LIBINC="${DIRS_LIBINC} ${DIR_JPEG}"
  301.     DIR_JPEGLIB="${DIR_JPEG}"
  302. }
  303. test -z "${DIR_LIBGZ-}" || {
  304.     DIRS_LIBINC="${DIRS_LIBINC} ${DIR_LIBGZ}"
  305.     DIR_GZLIB="${DIR_LIBGZ}"
  306. }
  307.  
  308. identifyTarget()
  309. {
  310.     random=`date | awk '{print $4}' | sed -e 's/.*://'` 2>/dev/null
  311.     case "$random" in
  312.     *0) Note "Wow, you've got a $1 system!";;
  313.     *1) Note "Hmm, looks like a $1 system.";;
  314.     *2) Note "Oh no, not another $1 system...";;
  315.     *3) Note "Well I'll be, a $1 system.";;
  316.     *4) Note "Fee, fie, foe, this smells like a $1 system.";;
  317.     *5)    Note "Gosh, aren't you lucky to have a $1 system!";;
  318.     *6)    Note "YOW!!  Did something bad happen or am I on a $1 system?";;
  319.     *7)    Note "Do they really still make $1 systems?!";;
  320.     *8)    Note "I'm always happy to encounter another $1 system.";;
  321.     *9)    Note "Here we are again, this time on a $1 system.";;
  322. esac
  323. }
  324.  
  325. #
  326. # If no target is specified, try to deduce the system.
  327. # We use the GNU scripts for guessing and canonicalizing
  328. # the system identification, if available.
  329. #
  330. if [ -z "$TARGET" ]; then
  331.     test -f $SRCDIR/config.guess && TARGET=`sh $SRCDIR/config.guess` 2>/dev/null
  332.     if [ -z "$TARGET" ]; then
  333.     bitch "Sorry, no target specified on the command line and I don't seem"
  334.     bitch "to have the GNU config.guess script that is used to deduce your"
  335.     bitch "system type."
  336.     kill -1 $$
  337.     fi
  338.     identifyTarget $TARGET
  339. elif [ -f $SRCDIR/config.sub ]; then
  340.     TARGET=`sh $SRCDIR/config.sub "$TARGET"`
  341. else
  342.     Note "Warning, I don't seem to have the GNU config.sub script to canonicalize"
  343.     Note "your target specification; this may cause problems later on..."
  344. fi
  345. if [ -z "${FILLORDER-}" ]; then
  346.     #
  347.     # Host bit order within a word.
  348.     #
  349.     case $TARGET in
  350.     mips-dec-*)    FILLORDER=LSB2MSB;;
  351.     i[345]86-*)    FILLORDER=LSB2MSB;;
  352.     *)        FILLORDER=MSB2LSB;;
  353.     esac
  354. fi
  355.  
  356. #
  357. # Find the full pathname of a file
  358. # using the specified test operation.
  359. #
  360. findThing()
  361. {
  362.     t="$1"; app="$2"; path="$3";
  363.     case "$app" in
  364.     /*) eval "$t" "$app" && { echo "$app"; return; };;
  365.     esac
  366.     (IFS=:
  367.     for i in $path; do
  368.     eval "$t" "$i/$app" && { echo "$i/$app"; return 0; }
  369.     done
  370.     return 1
  371.     )
  372. }
  373.  
  374. #
  375. # Find the full pathname of a plain file.
  376. #
  377. findFile()
  378. {
  379.     findThing "test -f" "$1" "$2"
  380. }
  381.  
  382. #
  383. # Find the full pathname of an executable.
  384. #
  385. findApp()
  386. {
  387.     findThing "test -x" $1 $2
  388. }
  389.  
  390. #
  391. # Find the full pathname of an executable;
  392. # supply a default if nothing is found.
  393. #
  394. findAppDef()
  395. {
  396.     app=$1; path=$2; def=$3
  397.     case $app in
  398.     /*) test -x $app && { echo $app; return; };;
  399.     esac
  400.     IFS=:
  401.     for i in $path; do
  402.     test -x $i/$app && { echo $i/$app; return; }
  403.     done
  404.     echo $def
  405. }
  406.  
  407. #
  408. # Find the full pathname of a header file; in search-path $DIRS_LIBINC
  409. #
  410. findHeader()
  411. {
  412.     case "$1" in
  413.     /*) echo "$1"; return ;;
  414.     esac
  415.     for i in ${DIRS_LIBINC} /usr/include; do
  416.     test -r $i/$1 && {
  417.         case "$i" in
  418.         /*) echo "$i/$1"; return ;;
  419.         esac
  420.         if [ $SRCDIR_IS_LIBTIFF = yes ]; then
  421.         echo "$i/$1";
  422.         else
  423.         echo "../$i/$1";
  424.         fi
  425.         return;
  426.     }
  427.     done
  428. }
  429.  
  430. #
  431. # Locate a C compiler that satisfies our needs (using assorted heuristics).
  432. #
  433. JUNK="
  434.     a.out
  435.     confsed
  436.     conftestmmap
  437.     confx confy
  438.     confMakefile
  439.     core
  440.     dummy
  441.     dummy.a
  442.     dummy.c
  443.     dummy.o
  444.     foo
  445.     so_locations
  446.     t.c
  447.     t.o
  448.     t
  449.     xMakedepend
  450.     xdefs
  451.     xgnu.c
  452.     xmakeinc
  453.     xport.h
  454. "
  455. trap "$RM \$JUNK; exit 1" 1 2 15
  456.  
  457. $RM $JUNK
  458.  
  459. cat>xgnu.c<<EOF
  460. #ifdef __GNUC__
  461. yes;
  462. #endif
  463. EOF
  464.  
  465. #
  466. # Check if the specified compiler is from GNU 
  467. #
  468. isGNU()
  469. {
  470.     capture "cat xgnu.c; ($1 -E xgnu.c 2>&5 | egrep yes)"
  471. }
  472.  
  473. #
  474. # NB: use ANSI C prototype to weed out non-ANSI compilers.
  475. #
  476. cat>dummy.c<<EOF
  477. main(int argc, char* argv) { exit(0); }
  478. EOF
  479.  
  480. checkCompiler()
  481. {
  482.     compiler=$1
  483.     if isGNU $compiler; then
  484.     ISGCC=yes
  485.     else
  486.     ISGCC=no
  487.     fi
  488.     #
  489.     # Guess special options needed to get an
  490.     # ANSI C compiler and/or similar.  Must
  491.     # be combined with above checks so we only
  492.     # select an ANSI C compiler.
  493.     #
  494.     if [ -z "${ENVOPTS-}" ]; then
  495.     case $ISGCC-$TARGET in
  496.     no-*-irix*)    C_ANSI="-ansi";;
  497.     no-*-hp*)    C_ANSI="-Aa -D_HPUX_SOURCE -Dhpux";;
  498.     no-*-apollo-*)    C_ANSI="-A nansi";;
  499.     no-*-aix*)    C_ANSI="-Dunix -qlanglvl=ansi -qsrcmsg";;
  500.     *-sco*)        C_ANSI="-Dsco";;
  501.     esac
  502.     else
  503.     C_ANSI="$ENVOPTS"
  504.     fi
  505.     $RM dummy dummy.o
  506.     capture $compiler -o dummy ${C_ANSI} dummy.c && {
  507.     CC=$compiler;
  508.     test -z "${CCOMPILER-}" && CCOMPILER=`findApp $compiler $PATH`
  509.     test -z "${ENVOPTS-}"   && ENVOPTS="${C_ANSI-}"
  510.     return 0
  511.     }
  512.     return 1
  513. }
  514.  
  515. CCtested=
  516. capture cat dummy.c
  517. if [ -z "${CC-}" ]; then
  518.     CCOMPILER=
  519.     for i in gcc cc ncc dcc xlc c89 gcc2; do
  520.     CCtested="$CCtested $i"
  521.     checkCompiler $i && break
  522.     done
  523. else
  524.     CCtested="$CCtested $CC"
  525.     checkCompiler $CC
  526. fi
  527. if [ -z "$CCOMPILER" ]; then
  528.     cat<<EOF
  529.  
  530. Cannot locate a working ANSI C compiler.
  531.  
  532. We attempted to compile the following test program:
  533.  
  534. ----------------------------------------------------------
  535. EOF
  536.     cat dummy.c
  537.     cat<<EOF
  538. ----------------------------------------------------------
  539.  
  540. with these compilers:
  541.  
  542.     $CCtested
  543.  
  544. but none of them were successful.
  545.  
  546. If your compiler is in a non-standard location, you can specify its
  547. location in several ways:
  548.  
  549.     o set the environment variable CC
  550.     o create a config.local or config.site file that includes a
  551.       definition for CC
  552.     o supply it on the command line using -with-CC=<pathname>
  553.  
  554. If command line options are required for ANSI C compilation, set the
  555. ENVOPTS parameter to these options in a similar way (either through
  556. an environment variable or config.local/config.site) and then rerun
  557. this script.
  558. EOF
  559.     boom
  560. fi
  561. Note "Using $CCOMPILER for a C compiler (use -with-CC=compilername to override)."
  562.  
  563. test "$ENVOPTS" && {
  564.     Note "Using $ENVOPTS to get the appropriate compilation environment."
  565. }
  566.  
  567. if [ ${ISGCC} = yes ] ; then
  568.     GCCversion="`${CCOMPILER} -v 2>&1 | \
  569.     sed -n -e '/version/s/.* \([0-9]*\)\.\([0-9]*\).\([0-9]*\)/\1.\2.\3/p'`"
  570. fi
  571.  
  572.  
  573. CheckForGandO()
  574. {
  575.    f=$1
  576.    if test -s $f; then
  577.     capture grep -i \(error\|warning\) $f || return 1
  578.     fi
  579.     return 0
  580. }
  581.  
  582. if [ -z "${GCOPTS-}" ]; then
  583.     if capture $CCOMPILER $ENVOPTS -g -c dummy.c; then
  584.     Note "Looks like $CCOMPILER supports the -g option."
  585.     # NB: cannot use captureX here 'cuz we lose stderr
  586.     if $CCOMPILER $ENVOPTS -c -g -O dummy.c >t 2>&1 && CheckForGandO t; then
  587.         GCOPTS="-g"
  588.     else
  589.         Note "... but not together with the -O option, not using it."
  590.         GCOPTS=
  591.     fi
  592.     else
  593.     GCOPTS=
  594.     fi
  595. fi
  596. if [ ! -z "${GCOPTS}" ]; then
  597.     Note "Using \"$GCOPTS\" for C compiler options."
  598. fi
  599.  
  600. #
  601. # Verify that $MAKE is accessible
  602. #
  603. PATHMAKE=`findApp ${MAKE} $PATH`
  604. if [ "$PATHMAKE" ]; then
  605.     Note "Using $PATHMAKE to configure the software."
  606.     (echo 'all:') | ${MAKE} -f - all >/dev/null 2>&5 || {
  607.     cat<<EOF
  608.  
  609. Something is wrong with "$MAKE" or $MAKE does not accept Makefiles
  610. from stdin with "-f -".  If you have MAKE set in your environment,
  611. verify it points to the right program you want to" use to build this
  612. software.  Otherwise, verify that you have the make program installed
  613. somewhere on your system and set the MAKE environment variable to the
  614. pathname of the program.
  615. EOF
  616.     boom
  617.     }
  618. else
  619.     cat<<EOF
  620. No $MAKE located in the search path.
  621.  
  622. There was no $MAKE program in the restricted search used by this script
  623. If $MAKE is in a non-standard location set the MAKE environment variable
  624. to the pathname of the appropriate program.
  625. EOF
  626.     boom
  627. fi
  628.  
  629. #
  630. # Check whether or not $MAKE automatically sets MAKE
  631. # in the Makefiles.  If not, we add an explicit define
  632. # for places where recursive calls are made.
  633. #
  634. if [ -z "${SETMAKE-}" ]; then
  635.     if (cat<<'EOF'
  636. SHELL=/bin/sh
  637. all:
  638.     @if [ -n "${MAKE}" ] ; then echo "make sets make"  ; fi
  639. EOF
  640. ) | $MAKE -f - | grep "make sets make" > /dev/null ; then
  641.     SETMAKE=
  642.     else
  643.     Note "Looks like $MAKE does not setup MAKE in Makefiles, will compensate."
  644.     SETMAKE="MAKE    = ${MAKE}"
  645.     fi
  646. fi
  647.  
  648. test -z "${AR-}" && AR=`findApp ar $PATH`
  649. if [ -z "$AR" ]; then
  650.     Note "*** Warning, could not locate a suitable ar command; using a default."
  651.     AR=ar
  652. fi
  653. test -z "${AROPTS-}" && AROPTS=rc
  654. test -z "${RANLIB-}" && RANLIB=`findApp ranlib $PATH`
  655. if [ -z "$RANLIB" ]; then
  656.     Note "Warning, no ranlib, assuming it's not needed."
  657.     RANLIB=":"
  658.     $RM dummy.a
  659.     if $AR rcs dummy.a >/dev/null 2>&1; then
  660.        AROPTS=crs
  661.        Note "Looks like ar has an s option to build symbol tables."
  662.     fi
  663. fi
  664.  
  665. #
  666. # runMake target rules ...
  667. #
  668. runMakeX()
  669. {
  670.     target="$1"; shift
  671.     $RM $target
  672.     (echo SRCDIR=.
  673.        for i in "$@"; do
  674.       echo "$i";
  675.        done
  676.     )>confMakefile
  677.     captureX ${MAKE} -f confMakefile $target
  678.     return
  679. }
  680. runMake()
  681. {
  682.     runMakeX "$@" >&5
  683.     return
  684. }
  685.  
  686. #
  687. # Look for a library using a known (unique) function.
  688. #
  689. CheckForLibrary()
  690. {
  691.     f=$1; shift
  692.     libs="$@";
  693.     cat>t.c<<EOF
  694. int t() { $f(); return 0; }
  695. int main(){ t(); return 0; }
  696. EOF
  697.     runMake t "t:; ${CCOMPILER} ${ENVOPTS} t.c $libs"
  698. }
  699.  
  700. #
  701. # Look for an include file.
  702. #
  703. CheckForIncludeFile()
  704. {
  705.     (for i do
  706.     echo "#include \"$i\""
  707.      done)>t.c
  708.     runMake t "t:; ${CCOMPILER} ${ENVOPTS} -E t.c"
  709. }
  710.  
  711. #
  712. # Figure out if certain system-specific interfaces are
  713. # supported.  We craft a port.h file that has external
  714. # declarations for missing routines that are required by
  715. # the system and modify defs to reflect which optional
  716. # interfaces are supported.
  717. #
  718.  
  719. EmitCPlusPlusPrologue()
  720. {
  721.     echo '/*'
  722.     echo ' * Warning, this file was automatically created by the TIFF configure script'
  723.     echo ' * VERSION:    ' $VERSION
  724.     echo ' * DATE:    ' $DATE
  725.     echo ' * TARGET:    ' $TARGET
  726.     if [ $ISGCC = yes ]; then
  727.     echo ' * CCOMPILER:    ' ${CCOMPILER}-${GCCversion}
  728.     else
  729.     echo ' * CCOMPILER:    ' $CCOMPILER
  730.     fi
  731.     echo ' */'
  732.     echo "#ifndef $1"
  733.     echo "#define $1 1"
  734.     echo '#ifdef __cplusplus'
  735.     echo 'extern "C" {'
  736.     echo '#endif'
  737. }
  738.  
  739. EmitCPlusPlusEpilogue()
  740. {
  741.     echo '#ifdef __cplusplus'
  742.     echo '}'
  743.     echo '#endif'
  744.     echo '#endif'
  745. }
  746.  
  747. #
  748. # Look for a function in one of the standard libraries
  749. # or one of the machine-dependent libraries selected above.
  750. #
  751. CheckForFunc()
  752. {
  753.     echo "extern int $1(); main(){$1();exit(0);}" >t.c
  754.     runMake t "t:; ${CCOMPILER} ${ENVOPTS} t.c ${MACHDEPLIBS}"
  755. }
  756.  
  757. #
  758. # Look for a function declaration in system include files.
  759. #
  760. AddFuncDecl()
  761. {
  762.     echo "$2";
  763.     Note "... add function prototype for $1"
  764. }
  765. CheckForFuncDecl()
  766. {
  767.     f=$1; shift
  768.     (for i do
  769.     echo "#include \"$i\""
  770.      done)>t.c
  771.     capture cat t.c
  772.     runMakeX t "t:; ${CCOMPILER} ${ENVOPTS} -E t.c" |\
  773.      awk '{while($0~/[,(][ \t]*$/){printf"%s",$0;getline}print}' |\
  774.      grep "$f[ ]*(.*)" >&5
  775.     return
  776. }
  777. CheckFuncDecl()
  778. {
  779.     f=$1; shift
  780.     decl=$1; shift
  781.     CheckForFuncDecl "$f" "$@" || AddFuncDecl "$f" "$decl"
  782. }
  783.  
  784. #
  785. # Look for a variable declaration in system include files.
  786. #
  787. CheckForVarDecl()
  788. {
  789.     v="$1"; shift
  790.     (for i do
  791.     echo "#include \"$i\""
  792.      done)>t.c
  793.     capture cat t.c
  794.     runMakeX t "t:; ${CCOMPILER} ${ENVOPTS} -E t.c" | grep "$v" >&5
  795.     return
  796. }
  797. CheckVarDecl()
  798. {
  799.     v="$1"; shift
  800.     decl="$1"; shift
  801.     CheckForVarDecl "$v" "$@" || \
  802.     (echo "$decl"; Note "... add declaration $decl")
  803. }
  804.  
  805. #
  806. # Look for a #define in system include files.
  807. #
  808. AddDefine()
  809. {
  810.    echo '#ifndef' $1
  811.    echo '#define' "$2"
  812.    echo '#endif'
  813.    Note '... add #define for' "$1"
  814. }
  815. CheckForDefine()
  816. {
  817.     def=$1; shift
  818.     (for i do
  819.     echo "#include \"$i\""
  820.      done
  821.      echo "#ifdef $def"
  822.      echo "FOUND();"
  823.      echo "#endif"
  824.     )>t.c
  825.     capture cat t.c
  826.     runMakeX t "t:; ${CCOMPILER} ${ENVOPTS} -E t.c" | grep FOUND >&5
  827. }
  828. CheckDefine()
  829. {
  830.     def=$1; shift
  831.     decl=$1; shift
  832.     CheckForDefine "$def" "$@" || AddDefine "$def" "$decl"
  833. }
  834.  
  835. CheckForMMAP()
  836. {
  837.     if CheckForFunc getpagesize; then
  838.     cat>t.c<<'EOF'
  839. /* this was lifted from GNU autoconf */
  840. /* Thanks to Mike Haertel and Jim Avera for this test. */
  841. #include <sys/types.h>
  842. #include <fcntl.h>
  843. #include <sys/mman.h>
  844. EOF
  845.     else
  846.     cat>t.c<<'EOF'
  847. /* this was lifted from GNU autoconf */
  848. /* Thanks to Mike Haertel and Jim Avera for this test. */
  849. #include <sys/types.h>
  850. #include <fcntl.h>
  851. #include <sys/mman.h>
  852.  
  853. #ifdef BSD
  854. # ifndef BSD4_1
  855. #  define HAVE_GETPAGESIZE
  856. # endif
  857. #endif
  858.  
  859. #ifndef HAVE_GETPAGESIZE
  860. # include <sys/param.h>
  861. # ifdef EXEC_PAGESIZE
  862. #  define getpagesize() EXEC_PAGESIZE
  863. # else
  864. #  ifdef NBPG
  865. #   define getpagesize() NBPG * CLSIZE
  866. #   ifndef CLSIZE
  867. #    define CLSIZE 1
  868. #   endif
  869. #  else
  870. #   ifdef NBPC
  871. #    define getpagesize() NBPC
  872. #   else
  873. #    define getpagesize() PAGESIZE /* SVR4 */
  874. #   endif
  875. #  endif
  876. # endif
  877. #endif
  878. EOF
  879.     fi
  880. cat>>t.c<<'EOF'
  881. #if defined(__osf__) || defined(_AIX)
  882. # define valloc malloc
  883. #endif
  884. char *valloc(), *malloc();
  885.  
  886. int
  887. main()
  888. {
  889.   char *buf1, *buf2, *buf3;
  890.   int i = getpagesize(), j;
  891.   int i2 = getpagesize()*2;
  892.   int fd;
  893.  
  894.   buf1 = (char *)valloc(i2);
  895.   buf2 = (char *)valloc(i);
  896.   buf3 = (char *)malloc(i2);
  897.   for (j = 0; j < i2; ++j)
  898.     *(buf1 + j) = rand();
  899.   fd = open("conftestmmap", O_CREAT | O_RDWR, 0666);
  900.   write(fd, buf1, i2);
  901.   mmap(buf2, i, PROT_READ | PROT_WRITE, MAP_FIXED | MAP_PRIVATE, fd, 0);
  902.   for (j = 0; j < i; ++j)
  903.     if (*(buf1 + j) != *(buf2 + j))
  904.       exit(1);
  905.   lseek(fd, (long)i, 0);
  906.   read(fd, buf2, i); /* read into mapped memory -- file should not change */
  907.   /* (it does in i386 SVR4.0 - Jim Avera, jima@netcom.com) */
  908.   lseek(fd, (long)0, 0);
  909.   read(fd, buf3, i2);
  910.   for (j = 0; j < i2; ++j)
  911.     if (*(buf1 + j) != *(buf3 + j))
  912.       exit(1);
  913.   exit(0);
  914. }
  915. EOF
  916.     capture cat t.c
  917.     runMake t "t:; ${CCOMPILER} ${ENVOPTS} t.c ${MACHDEPLIBS}" && ./a.out
  918. }
  919.  
  920. CheckForBigEndian()
  921. {
  922.     echo 'main() { int one = 1; char* cp = (char*)&one; exit(*cp!=0); }'>t.c
  923.     capture cat t.c
  924.     runMake t "t:; ${CCOMPILER} ${ENVOPTS} t.c" && ./a.out
  925. }
  926.  
  927. #
  928. # Check an existing port.h to see if it was created
  929. # for the target and compiler we are using.
  930. #
  931. CheckPortDotH()
  932. {
  933.     getConfigTag()
  934.     {
  935.     param=`grep "$1:" $2 | sed -e 's/.*:[     ]*\([^     ]*\).*/\1/'`
  936.     }
  937.     getConfigTag TARGET $PORTDOTH; target="$param"
  938.     getConfigTag CCOMPILER $PORTDOTH; ccompiler="$param"
  939.     CCOMP=$CCOMPILER
  940.     if [ $ISGCC = yes ]; then
  941.     CCOMP="${CCOMP}-${GCCversion}"
  942.     fi
  943.     test "$target" = "$TARGET" && test "$ccompiler" = "$CCOMP"
  944. }
  945.  
  946. #
  947. # Built port.h based on the system and compiler setup.
  948. #
  949. BuildPortDotH()
  950. {
  951.     Note ""
  952.     Note "Creating $PORTDOTH with necessary definitions."
  953.  
  954.     (EmitCPlusPlusPrologue _PORT_
  955.  
  956.     CheckForIncludeFile sys/types.h && echo '#include <sys/types.h>'
  957.     CheckVarDecl off_t 'typedef long off_t;' sys/types.h stdlib.h
  958.     CheckVarDecl size_t 'typedef unsigned size_t;' sys/types.h stdlib.h
  959.     CheckVarDecl u_char 'typedef unsigned char u_char;' sys/types.h
  960.     CheckVarDecl u_short 'typedef unsigned short u_short;' sys/types.h
  961.     CheckVarDecl u_int 'typedef unsigned int u_int;' sys/types.h
  962.     CheckVarDecl u_long 'typedef unsigned long u_long;' sys/types.h
  963.  
  964.     echo "#define HOST_FILLORDER FILLORDER_${FILLORDER}"
  965.     CPU=`echo $TARGET | sed 's/-.*//'`
  966.     Note "... using $FILLORDER bit order for your $CPU cpu"
  967.     if CheckForBigEndian; then
  968.     echo "#define HOST_BIGENDIAN    1"
  969.     Note "... using big-endian byte order for your $CPU cpu"
  970.     else
  971.     echo "#define HOST_BIGENDIAN    0"
  972.     Note "... using little-endian byte order for your $CPU cpu"
  973.     fi
  974.  
  975.     CheckForMMAP && {
  976.     echo '#define HAVE_MMAP 1'
  977.     Note "... configure use of mmap for memory-mapped files"
  978.     CheckFuncDecl mmap \
  979.         'extern void* mmap(void*, size_t, int, int, int, off_t);' sys/mman.h
  980.     }
  981.  
  982.     CheckForIncludeFile stdio.h        && echo '#include <stdio.h>'
  983.     CheckForIncludeFile unistd.h    && echo '#include <unistd.h>'
  984.     CheckForIncludeFile string.h    && echo '#include <string.h>'
  985.     CheckForIncludeFile stdlib.h    && echo '#include <stdlib.h>'
  986.     if CheckForDefine O_RDONLY fcntl.h; then
  987.     echo '#include <fcntl.h>'
  988.     Note "... O_RDONLY is in <fcntl.h>"
  989.     elif CheckForDefine O_RDONLY sys/file.h; then
  990.     echo '#include <sys/file.h>'
  991.     Note "... O_RDONLY is in <sys/file.h>"
  992.     else
  993.     AddDefine O_RDONLY "O_RDONLY    0"
  994.     AddDefine O_WRONLY "O_WRONLY    1"
  995.     AddDefine O_RDWR   "O_RDWR    2"
  996.     fi
  997.  
  998.     echo 'typedef double dblparam_t;'
  999.     Note "... using double for promoted floating point parameters"
  1000.  
  1001.     if [ -z "${INLINE-}" ]; then
  1002.     if [ $ISGCC = yes ]; then
  1003.         echo '#ifdef __STRICT_ANSI__'
  1004.         echo '#define    INLINE    __inline__'
  1005.         echo '#else'
  1006.         echo '#define    INLINE    inline'
  1007.         echo '#endif'
  1008.         Note "... enabling use of inline functions"
  1009.     else
  1010.         echo '#define    INLINE'
  1011.         Note "... disabling use of inline functions"
  1012.     fi
  1013.     else
  1014.     echo "#define INLINE $INLINE"
  1015.     Note "... using \"$INLINE\" to control inline function usage"
  1016.     fi
  1017.  
  1018.     echo '#define GLOBALDATA(TYPE,NAME)    extern TYPE NAME'
  1019.  
  1020.     CheckFuncDecl memset 'extern void* memset(void*, int, size_t);' string.h
  1021.     CheckFuncDecl floor 'extern double floor(double);' math.h
  1022.     CheckFuncDecl ceil 'extern double ceil(double);' math.h
  1023.     CheckFuncDecl exp 'extern double exp(double);' math.h
  1024.     CheckFuncDecl pow 'extern double pow(double, double);' math.h
  1025.     CheckFuncDecl read 'extern int read(int, const void*, unsigned int);' unistd.h
  1026.     CheckFuncDecl malloc 'extern void* malloc(size_t);' stdlib.h
  1027.     CheckFuncDecl realloc 'extern void* realloc(void*, size_t);' stdlib.h
  1028.     CheckFuncDecl free 'extern void free(void*);' stdlib.h
  1029.     EmitCPlusPlusEpilogue
  1030.     )>xport.h
  1031.     if [ $SRCDIR_IS_LIBTIFF = no -a ! -d libtiff ]; then
  1032.     Note "Creating libtiff directory"
  1033.     mkdir libtiff
  1034.     fi
  1035.     mv xport.h $PORTDOTH; chmod 444 $PORTDOTH
  1036.     Note "Done creating $PORTDOTH."
  1037. }
  1038.  
  1039. if [ "$PORT" != no ] && test -f $PORTDOTH && CheckPortDotH; then
  1040.     Note ""
  1041.     Note "Using previously created $PORTDOTH."
  1042. else
  1043.     $RM xport.h t.c a.out $PORTDOTH
  1044.     BuildPortDotH
  1045. fi
  1046.  
  1047. if [ "$PORT" = auto ]; then
  1048.     Note ""
  1049.     Note "Checking system libraries for functionality to emulate."
  1050.  
  1051.     FUNCS="
  1052.         strcasecmp
  1053.         strtoul
  1054.         getopt
  1055.     "
  1056.  
  1057.     for i in $FUNCS; do
  1058.         CheckForFunc $i || {
  1059.             Note "... emulate $i"
  1060.             PORTFUNCS="${PORTFUNCS-} $i.c"
  1061.         }
  1062.     done
  1063.     if [ "${PORTFUNCS-}" ]; then
  1064.         LIBPORT='../port/libport.a'
  1065.         PORT=yes
  1066.     else
  1067.         PORT=no
  1068.     fi
  1069. fi
  1070. if [ $PORT != yes ] ; then
  1071.    LIBPORT=
  1072.    PORTFUNCS=
  1073. fi
  1074. Note "Done checking system libraries."
  1075.  
  1076. Note ""
  1077. Note "Checking for Dynamic Shared Object (DSO) support."
  1078. if [ "$DSO" = auto ]; then
  1079.     DSOSUF_VERSION=
  1080.     case $TARGET-$CC-$ISGCC in
  1081.     *-irix5.2*)
  1082.     if (findApp rld /lib:/usr/lib:$PATH) >/dev/null 2>&1; then
  1083.         DSOSUF=so
  1084.         DSOLD='${LD}'
  1085.         DSOOPTS='-elf -shared -no_unresolved -all'
  1086.         DSO=IRIX52
  1087.     fi
  1088.     ;;
  1089.     *-irix*)
  1090.     if (findApp rld /lib:/usr/lib:$PATH) >/dev/null 2>&1; then
  1091.         DSOSUF=so
  1092.         DSOLD="${CCOMPILER} ${ENVOPTS}"
  1093.         DSOOPTS='-shared -rdata_shared -check_registry ${SRCDIR}/port/irix/so_locations -quickstart_info'
  1094.         DSO=IRIX
  1095.     fi
  1096.     ;;
  1097.     *-aix*)
  1098.     DSOSUF=a
  1099.     DSOLD='${LD}'
  1100.     DSOOPTS='-r'
  1101.     LIBCOPTS="-bM\:SRE"
  1102.     DSO=AIX
  1103.     ;;
  1104.     *-hpux*)
  1105.     DSOSUF=sl
  1106.     DSOLD='${LD}'
  1107.     DSOOPTS='-b'
  1108.     LIBCOPTS="+Z"
  1109. #    LIBPORT="-Wl,+b${DIR_LIB}"
  1110.     DSO=HPUX
  1111.     ;;
  1112.     *-solaris*-yes)
  1113.     DSOSUF=so
  1114.     DSOLD='${LD}'
  1115.     DSOOPTS='-G'
  1116.     LIBCOPTS="-fpic"
  1117.     DSO=SOLARIS
  1118.     ;;
  1119.     *-solaris*)
  1120.     DSOSUF=so
  1121.     DSOLD='${LD}'
  1122.     DSOOPTS='-G'
  1123.     LIBCOPTS="-K PIC"
  1124.     DSO=SOLARIS
  1125.     ;;
  1126.     *-linux)
  1127.     if [ -x /lib/libc.so.5 ]; then
  1128.         DSOSUF=so.${DIST_MAJOR}
  1129.         DSOSUF_VERSION=${DSOSUF}.${DIST_MINOR}.${DIST_ALPHA}
  1130.         LIBCOPTS='-fPIC'
  1131.         DSOOPTS='-shared'
  1132.         DSO=LINUX
  1133.     fi
  1134.     ;;
  1135.     *-osf3*)
  1136.     DSOSUF=so
  1137.     DSOOPTS='-shared'
  1138.     DSO=OSF
  1139.     ;;
  1140.     *)  DSO=no;;
  1141.     esac
  1142.     test -z "$DSOSUF_VERSION" && DSOSUF_VERSION=${DSOSUF}
  1143. fi
  1144. if [ "$DSO" != no ]; then
  1145.     JUNK="$JUNK t.${DSOSUF}"
  1146.     #
  1147.     # Check to make sure the compilers process
  1148.     # the DSO options in the expected way.
  1149.     #
  1150.     CheckCCDSO()
  1151.     {
  1152.     $RM t.c t.o t.${DSOSUF}
  1153.     cat>t.c<<EOF
  1154. int f() { return 0; }
  1155. EOF
  1156.     capture cat t.c
  1157.     runMake t \
  1158.     "t.o:; ${CCOMPILER} ${ENVOPTS} ${LIBCOPTS} -c t.c" \
  1159.     "t: t.o; ${DSOLD} ${DSOOPTS} -o t.${DSOSUF} t.o"
  1160.     }
  1161.     if CheckCCDSO; then
  1162.     Note "Looks like your system supports $DSO-style DSOs."
  1163.     else
  1164.     cat 1>&4 <<EOF
  1165. Looks like your system supports $DSO-style DSOs...
  1166. ... sigh, but $CCOMPILER does not support DSOs in the expected way.
  1167. EOF
  1168.     DSO=no
  1169.     fi
  1170. fi
  1171. if [ "$DSO" = no ]; then
  1172.     DSOSUF=a DSOOPTS= LIBCOPTS= 
  1173.     DSOSUF_VERSION=$DSOSUF
  1174. fi
  1175. Note "Done checking for DSO support."
  1176.  
  1177. Note ""
  1178. if [ "$LIBIMAGE" = auto ]; then
  1179.     if CheckForLibrary iopen -limage && CheckForIncludeFile gl/image.h; then
  1180.     Note "Looks like there is support for SGI RGB images."
  1181.     LIBIMAGE=yes
  1182.     else
  1183.     LIBIMAGE=no
  1184.     fi
  1185. fi
  1186. if [ "$LIBGL" = auto ]; then
  1187.     if CheckForLibrary winopen -lgl && CheckForIncludeFile gl.h; then
  1188.     Note "Looks like there is support for IRIS GL."
  1189.     LIBGL=yes
  1190.     else
  1191.     LIBGL=no
  1192.     fi
  1193. fi
  1194.  
  1195. test $LIBGL = no -a $LIBIMAGE = no || Note ""
  1196. Note "Selecting programs used during installation."
  1197.  
  1198.  
  1199. #
  1200. # Miscellaneous ``little'' programs.
  1201. #
  1202. test -z "${CHMOD-}"    && CHMOD=`findAppDef chmod $PATH chmod`
  1203. test -z "${LN-}"    && LN=`findAppDef ln $PATH ln`
  1204. test -z "${SCRIPT_SH-}" && SCRIPT_SH=`findAppDef sh $PATH sh`
  1205. test -z "${SED-}"    && SED=`findAppDef sed $PATH sed`
  1206. test -z "${STRIP-}"    && STRIP=`findAppDef strip $PATH strip`
  1207.  
  1208. #
  1209. # Check if mv -f is supported
  1210. #
  1211. if [ -z "${MV_F-}" ]; then
  1212.     $RM t.c; echo "">t.c
  1213.     if mv -f t.c t.o; then
  1214.     Note "Looks like mv supports the -f option to force a move."
  1215.     MV_F=-f
  1216.     else
  1217.     Note "Warning, looks like mv has no -f option to force move operations;"
  1218.     Note "... this may cause problems during installation."
  1219.     MV_F=
  1220.     fi
  1221. fi
  1222.  
  1223. #
  1224. # Check if ln -s creates a symbolic link.
  1225. #
  1226. if [ -z "${LN_S-}" ]; then
  1227.     $RM t.c; $LN -s foo t.c && LN_S=-s
  1228. fi
  1229. if [ -n "$LN_S" ]; then
  1230.     Note "Looks like $LN supports the -s option to create a symbolic link."
  1231. else
  1232.     Note "Warning, looks like $LN has no -s option to create symbolic links;"
  1233.     Note "... this may cause problems during installation."
  1234. fi
  1235.  
  1236. #
  1237. # Pick install mechanism.
  1238. #
  1239. if [ -z "${INSTALL-}" ]; then
  1240.     case $TARGET in
  1241.     *-irix*)    INSTALL=`findApp install /sbin:$PATH`;;
  1242.     *)        INSTALL='${SHELL} ../port/install.sh';;
  1243.     esac
  1244. fi
  1245.  
  1246. Note "Done selecting programs."
  1247.  
  1248. #
  1249. # User-changable configuration parameters section.
  1250. # Anything selected here is presented to the user
  1251. # and may be interactively changed.
  1252. #
  1253.  
  1254. Note ""
  1255. Note "Selecting default TIFF configuration parameters."
  1256. Note ""
  1257.  
  1258. #
  1259. # Fill in any other configuration parameters not
  1260. # setup in the site and local files.
  1261. #
  1262.  
  1263. bitchExecutable()
  1264. {
  1265.     echo ""
  1266.     echo "Warning, $1 does not seem to be an executable program;"
  1267.     echo "you'll need to correct this before starting up the fax server."
  1268.     echo ""
  1269. }
  1270.  
  1271. #
  1272. # Setup manual page-related stuff.
  1273. #
  1274. # Manual pages are processed according to:
  1275. # 1. Section organization (BSD or System V)
  1276. # 2. Pre-formatted (w/ nroff) or source.
  1277. # 3. Compressed (compress, gzip, pack) or uncompressed.
  1278. # 4. Whether or not the FlexFAX ``F'' suffix must be
  1279. #    stripped for pages to be found (only for 4F pages).
  1280. #
  1281. if [ -z "${DIR_MAN-}" ]; then
  1282.     MANPATH="
  1283.     $MANPATH
  1284.     /usr/local/man
  1285.     /usr/contrib/man
  1286.     /usr/catman/local
  1287.     "
  1288.     DIR_MAN=
  1289.     for i in $MANPATH; do
  1290.     test -d $i && { DIR_MAN=$i; break; }
  1291.     done
  1292.     test -z "$DIR_MAN" && DIR_MAN=/usr/local/man
  1293. fi
  1294. Note "Looks like manual pages go in $DIR_MAN."
  1295. if [ -z "${MANSCHEME-}" ]; then
  1296.     case $TARGET in
  1297.     *-bsdi*|*-netbsd*)        MANSCHEME=bsd-nroff-gzip-0.gz;;
  1298.     *-freebsd*)            MANSCHEME=bsd-source-cat;;
  1299.     *-linux*)            MANSCHEME=bsd-source-cat;;
  1300.     *-ultrix*)            MANSCHEME=bsd-source-cat;;
  1301.     *-sunos*)            MANSCHEME=bsd-source-cat-strip;;
  1302.     *-sysv[234]*)        MANSCHEME=sysv-source-cat-strip;;
  1303.     *-hpux*)            MANSCHEME=sysv-source-cat-strip;;
  1304.     *-solaris*)            MANSCHEME=sysv-source-cat-strip;;
  1305.     *-aix*)            MANSCHEME=sysv-source-strip;;
  1306.     *-isc*|*-sco*)        MANSCHEME=sysv-source-cat;;
  1307.     *-irix*)            MANSCHEME=sysv-nroff-compress-Z;;
  1308.     *)
  1309.     #
  1310.     # Try to deduce the setup from existing manual pages.
  1311.     # XXX needs more work XXX
  1312.     #
  1313.     MANSCHEME=sysv-source-cat
  1314.     if [ -d /usr/share/man ]; then
  1315.         if [ -d /usr/share/man/u_man ]; then
  1316.            MANSCHEME=sysv-source-cat
  1317.         elif [ -d /usr/share/man/man8 ]; then
  1318.            MANSCHEME=bsd-source-cat
  1319.         fi
  1320.     elif [ -d /usr/share/catman ]; then
  1321.         if [ -d /usr/share/catman/u_man ]; then
  1322.            MANSCHEME=sysv-nroff-cat
  1323.         elif [ -d /usr/share/catman/man8 ]; then
  1324.            MANSCHEME=bsd-nroff-cat
  1325.         fi
  1326.     fi
  1327.     ;;
  1328.     esac
  1329. fi
  1330. Note "Looks like manual pages should be installed with $MANSCHEME."
  1331.  
  1332. #
  1333. # Figure out which brand of echo we have and define
  1334. # prompt and print shell functions accordingly.
  1335. #
  1336. if [ `echo foo\\\c`@ = "foo@" ]; then
  1337.     prompt()
  1338.     {
  1339.     echo "$* \\c"
  1340.     }
  1341. elif [ "`echo -n foo`@" = "foo@" ]; then
  1342.     prompt()
  1343.     {
  1344.     echo -n "$* "
  1345.     }
  1346. else
  1347.     prompt()
  1348.     {
  1349.     echo "$*"
  1350.     }
  1351. fi
  1352.  
  1353. #
  1354. # Prompt the user for a string that can not be null.
  1355. #
  1356. promptForNonNullStringParameter()
  1357. {
  1358.     x="" val="$1" desc="$2"
  1359.     while [ -z "$x" ]; do
  1360.     prompt "$desc [$val]?"; read x
  1361.     if [ "$x" ]; then
  1362.         # strip leading and trailing white space
  1363.         x=`echo "$x" | sed -e 's/^[     ]*//' -e 's/[     ]*$//'`
  1364.     else
  1365.         x="$val"
  1366.     fi
  1367.     done
  1368.     param="$x"
  1369. }
  1370.  
  1371. promptForManPageScheme()
  1372. {
  1373.     x=""
  1374.     while [ -z "$x" ]; do
  1375.     prompt "Manual page installation scheme [$MANSCHEME]?"; read x
  1376.     if [ "$x" ]; then
  1377.         # strip leading and trailing white space
  1378.         x=`echo "$x" | sed -e 's/^[     ]*//' -e 's/[     ]*$//'`
  1379.         # XXX do a better job of validating...
  1380.         case "$x" in
  1381.         bsd-nroff-cat*|sysv-nroff-cat*)    ;;
  1382.         bsd-nroff-gzip*|sysv-nroff-gzip*)    ;;
  1383.         bsd-nroff-comp*|sysv-nroff-comp*)    ;;
  1384.         bsd-nroff-pack*|sysv-nroff-pack*)    ;;
  1385.         bsd-source-cat*|sysv-source-cat*)    ;;
  1386.         bsd-source-gzip*|sysv-source-gzip*)    ;;
  1387.         bsd-source-comp*|sysv-source-comp*)    ;;
  1388.         bsd-source-pack*|sysv-source-pack*)    ;;
  1389.         *)
  1390. cat <<EOF
  1391.  
  1392. "$x" is not a valid manual page installation scheme.  Schemes are
  1393. constructed according to:
  1394.  
  1395.     <organization>-<formatting>-<compression>[-<suffix>]
  1396.  
  1397. where:
  1398.  
  1399. <organization>  is either "bsd" for BSD-style section organization (e.g.
  1400.         file formats in section 5) or "sysv" for System V-style
  1401.         organization (e.g. file formats in section 4).
  1402.  
  1403. <formatting>    is either "nroff" to force installation of formatted
  1404.                 materials (using nroff) or "source" to get the nroff
  1405.         source installed.
  1406.  
  1407. <compression>   is either the name of a program to compress the manual
  1408.                 pages (gipz, compress, pack) or "cat" for uncompressed data.
  1409.  
  1410. <suffix>        is either the file suffix to convert installed pages to
  1411.                 (e.g. 0.gz for gzip-compressed pages under BSD) or "strip"
  1412.         to force the normal ".4f" suffix to be converted to ".4"
  1413.         (or ".5" if using the BSD organization).  If no -<suffix>
  1414.         is specified then filenames are not converted when they
  1415.         are installed.
  1416.  
  1417. Common schemes are:
  1418.  
  1419. bsd-nroff-gzip-0.gz    compressed formatted pages for BSD 
  1420. bsd-source-cat        nroff source w/ BSD organization
  1421. sysv-source-cat-strip    nroff source for SysV w/o .4f suffix
  1422. sysv-source-cat        nroff source for SysV as-is
  1423.  
  1424. EOF
  1425.         x="";;
  1426.         esac
  1427.     else
  1428.         x="$MANSCHEME"
  1429.     fi
  1430.     done
  1431.     MANSCHEME="$x"
  1432. }
  1433.  
  1434. printConfig()
  1435. {
  1436.     cat<<EOF
  1437.  
  1438. TIFF configuration parameters are:
  1439.  
  1440. [ 1] Directory for tools:            $DIR_BIN
  1441. [ 2] Directory for libraries:           $DIR_LIB
  1442. [ 3] Directory for include files:       $DIR_INC
  1443. [ 4] Directory for manual pages:        $DIR_MAN
  1444. [ 5] Manual page installation scheme:   $MANSCHEME
  1445.  
  1446. EOF
  1447. }
  1448.  
  1449. promptForParameter()
  1450. {
  1451.     case $1 in
  1452.     1)    promptForNonNullStringParameter "$DIR_BIN" \
  1453.         "Directory to install tools";        DIR_BIN="$param"
  1454.     ;;
  1455.     2)    promptForNonNullStringParameter "$DIR_LIB" \
  1456.         "Directory to install libraries";        DIR_LIB="$param"
  1457.     ;;
  1458.     3)    promptForNonNullStringParameter "$DIR_INC" \
  1459.         "Directory to install include files";    DIR_INC="$param"
  1460.     ;;
  1461.     4)    promptForNonNullStringParameter "$DIR_MAN" \
  1462.         "Directory to install manual pages";    DIR_MAN="$param"
  1463.     ;;
  1464.     5)    promptForManPageScheme;;
  1465.     esac
  1466. }
  1467.  
  1468. checkJPEG()
  1469. {
  1470.     if [ "${JPEG}" = yes ]; then
  1471.     test "`findHeader jpeglib.h`" || {
  1472.         cat<<EOF
  1473.  
  1474. The set of libtiff include directories,
  1475.  
  1476.     DIRS_LIBINC=${DIRS_LIBINC}
  1477.  
  1478. does not seem to be setup correctly; "jpeglib.h" was not found.
  1479. This must be corrected if the JPEG support is to be enabled.
  1480. Either fix the pathname or disable the JPEG support.
  1481.  
  1482. EOF
  1483.     }
  1484.         test $SRCDIR_IS_LIBTIFF = yes || \
  1485.       test -d "${DIR_JPEGLIB:-/dev/null/no-such-file}" || {
  1486.         cat<<EOF
  1487.  
  1488. The JPEG library directory, "${DIR_JPEGLIB}", does not seem to exist.
  1489. This must be corrected if the JPEG support is to be enabled.
  1490. Either fix the pathname or disable the JPEG support.
  1491.  
  1492. EOF
  1493.         }
  1494.     fi
  1495. }
  1496.  
  1497. checkZIP()
  1498. {
  1499.     if [ "${ZIP}" = yes ]; then
  1500.     test "`findHeader zlib.h`" || {
  1501.             cat<<EOF
  1502.  
  1503. The set of libtiff include directories,
  1504.  
  1505.     DIRS_LIBINC=${DIRS_LIBINC}
  1506.  
  1507. does not seem to be setup correctly; "zlib.h" was not found.
  1508. This must be corrected if the (G)ZIP support is to be enabled.
  1509. Either fix the pathname or disable the (G)ZIP support.
  1510.  
  1511. EOF
  1512.         }
  1513.         test $SRCDIR_IS_LIBTIFF = yes \
  1514.           || test -d "${DIR_GZLIB:-/dev/null/no-such-file}" || {
  1515.         cat<<EOF
  1516.  
  1517. The libgz library directory, "${DIR_GZLIB}", does not seem to exist.
  1518. This must be corrected if the ZIP support is to be enabled.
  1519. Either fix the pathname or disable the ZIP support.
  1520.  
  1521. EOF
  1522.         }
  1523.     fi
  1524. }
  1525.  
  1526. if [ $NONINTERACTIVE = no ] ; then
  1527.     ok=skip
  1528.     while [ "$ok" != y ] && [ "$ok" != yes ]; do
  1529.     if [ "$ok" != skip ]; then
  1530.         for i in 1 2 3 4 5 6; do
  1531.         promptForParameter $i;
  1532.         done
  1533.     fi
  1534.     printConfig; prompt "Are these ok [yes]?"; read ok
  1535.     test -z "$ok" && ok=yes
  1536.     case "$ok" in
  1537.     [1-9]|1[0-7])    promptForParameter $ok;;
  1538.     [yY]*|[nN]*)    continue;;
  1539.     ?*)
  1540.         echo ""
  1541.         echo "\"y\", \"yes\", or <RETURN> accepts the displayed parameters."
  1542.         echo "A number lets you change the numbered parameter."
  1543.         echo ""
  1544.         ;;
  1545.     esac
  1546.     ok=skip
  1547.     done
  1548.     checkJPEG
  1549.     checkZIP
  1550. else
  1551.     checkJPEG
  1552.     checkZIP
  1553. fi
  1554.  
  1555. case $MANSCHEME in
  1556. *-source-*)    MANAPPS=man1 MANLIB=man3;;
  1557. *-nroff-*)    MANAPPS=cat1 MANLIB=cat3;;
  1558. esac
  1559. case $MANSCHEME in
  1560. *-strip)    MANSEDLOCAL="-e s/3T/3/g";;
  1561. *)        MANSEDLOCAL="";;
  1562. esac
  1563. case $MANSCHEME in
  1564. *-source-*)    MANCVT='${MANSED} $? >$@';;
  1565. *-nroff-gzip-*)    MANCVT='${MANSED} $? | nroff -man | gzip > $@';;
  1566. *-nroff-pack-*)    MANCVT='${MANSED} $? | nroff -man | pack > $@';;
  1567. *-nroff-com*-*)    MANCVT='${MANSED} $? | nroff -man | compress > $@';;
  1568. *-nroff-cat-*)    MANCVT='${MANSED} $? | nroff -man > $@';;
  1569. esac
  1570. case $MANSCHEME in
  1571. *-0|*-0.gz|*-0.Z|*-gz|*-Z|*-z)
  1572.     suf=`echo $MANSCHEME | sed 's/.*-/./'`
  1573.     A='`echo $$i | sed' B='`'        # workaround shell bugs
  1574.     MANAPPNAME="$A s/\\\\.1\$\$/$suf/$B"
  1575.     MANLIBNAME="$A s/\\\\.3t\$\$/$suf/$B"
  1576.     ;;
  1577. *-strip)
  1578.     MANAPPNAME='$$i'
  1579.     MANLIBNAME='`echo $$i | sed s/\\.3t$$/.3/`'
  1580.     ;;
  1581. *)
  1582.     MANAPPNAME='$$i' MANLIBNAME='$$i'
  1583.     ;;
  1584. esac
  1585.  
  1586. if [ "${JPEG}" = yes ]; then
  1587.     test -z "${CONF_JPEG-}"    && CONF_JPEG="-DJPEG_SUPPORT"
  1588.     if test -z "${LIBJPEG-}" ; then
  1589.       LIBJPEG="-ljpeg"
  1590.       test -z "${DIR_JPEGLIB-}" || LIBJPEG="-L${DIR_JPEGLIB} ${LIBJPEG}"
  1591.     fi
  1592. else
  1593.     CONF_JPEG=
  1594.     LIBJPEG=
  1595. fi
  1596. if [ "${ZIP}" = yes ]; then
  1597.     test -z "${CONF_ZIP-}"    && CONF_ZIP="-DZIP_SUPPORT"
  1598.     if test -z "${LIBGZ-}" ; then
  1599.       LIBGZ="-lz"
  1600.       test -z "${DIR_GZLIB-}" || LIBGZ="-L${DIR_GZLIB} ${LIBGZ}"
  1601.     fi
  1602. else
  1603.     CONF_ZIP=
  1604.     LIBGZ=
  1605. fi
  1606.  
  1607. Note ""
  1608.  
  1609. #
  1610. # Fixup a list of potentially relative pathnames so
  1611. # that they work when used in a subdirectory.  The
  1612. # string sent to stdout has no extraneous spaces so
  1613. # it can be used, for example, in building pathnames.
  1614. #
  1615. # NB: There's an extra echo done here so we get a
  1616. #     \n-terminated string passed to sed.
  1617. #
  1618. relativize()
  1619. {
  1620.     echo `if [ $SRCDIR_IS_LIBTIFF = no ]; then
  1621.     (for i do
  1622.         case "$i" in
  1623.         /*|-l*)    echo "$i" ;;
  1624.         -[LR])    ;;                # XXX???
  1625.         -[LR]/*)    echo "$i" ;;
  1626.         -L*)    echo "$i" | sed 's;^-L;-L../;' ;;
  1627.         -R*)    echo "$i" | sed 's;^-R;-R../;' ;;
  1628.         *)        echo "../$i" ;;
  1629.         esac
  1630.     done) | tr '\012' ' '
  1631.     else
  1632.     echo "$@"
  1633.     fi` | sed -e 's;[ ][ ]*$;;' -e 's;/[.]$;;'
  1634. }
  1635. #
  1636. # Generate a list of compiler include options,
  1637. # prepending ``../'' to any relative pathnames.
  1638. #
  1639. makeIncArgs()
  1640. {
  1641.     (for i do
  1642.         case "$i" in
  1643.     /*)  echo "-I$i" ;;
  1644.     *)
  1645.         if [ $SRCDIR_IS_LIBTIFF = yes ]; then
  1646.         echo "-I$i" 
  1647.         else
  1648.         echo "-I../$i" 
  1649.         fi ;;
  1650.         esac
  1651.     done) | tr '\012' ' '
  1652. }
  1653.  
  1654. #
  1655. # Setup parameters needed below.
  1656. #
  1657. if [ $SRCDIR_IS_LIBTIFF = yes ]; then
  1658.     CONFIGDIR="."
  1659.     LIBSRCDIR="${SRCDIR}"
  1660. else
  1661.     CONFIGDIR=".."
  1662.     LIBSRCDIR=`relativize ${SRCDIR}`/libtiff
  1663. fi
  1664.  
  1665. # NB: these should be sorted alphabetically
  1666. cat>>confsed<<EOF
  1667. /@AR@/s;;${AR};g
  1668. /@ALPHAFILE@/s;;`relativize ${ALPHAFILE}`;g
  1669. /@AROPTS@/s;;${AROPTS};g
  1670. /@CONFIGDIR@/s;;${CONFIGDIR};g
  1671. /@CCOMPILER@/s;;${CCOMPILER};g
  1672. /@CHMOD@/s;;${CHMOD};g
  1673. /@CONF_JPEG@/s;;${CONF_JPEG};g
  1674. /@CONF_ZIP@/s;;${CONF_ZIP};g
  1675. /@COPT_LIBINC@/s;;`makeIncArgs ${DIRS_LIBINC}`;g
  1676. /@DATE@/s;;${DATE};g
  1677. /@DEPEND_JPEGLIB@/s;;${CONF_JPEG:+`findHeader jpeglib.h` `findHeader jerror.h`};g
  1678. /@DEPEND_ZLIB@/s;;${CONF_ZIP:+`findHeader zlib.h`};g
  1679. /@DIR_BIN@/s;;${DIR_BIN};g
  1680. /@DIR_JPEGLIB@/s;;`relativize ${DIR_JPEGLIB}`;g
  1681. /@DIR_GZLIB@/s;;`relativize ${DIR_GZLIB}`;g
  1682. /@DIR_INC@/s;;${DIR_INC};g
  1683. /@DIR_LIB@/s;;${DIR_LIB};g
  1684. /@DIR_MAN@/s;;${DIR_MAN};g
  1685. /@DIRS_LIBINC@/s;;`relativize ${DIRS_LIBINC}`;g
  1686. /@DIST_ALPHA@/s;;${DIST_ALPHA};g
  1687. /@DIST_MAJOR@/s;;${DIST_MAJOR};g
  1688. /@DIST_MINOR@/s;;${DIST_MINOR};g
  1689. /@DSO@/s;;${DSO};g
  1690. /@DSOSUF@/s;;${DSOSUF};g
  1691. /@DSOSUF_VERSION@/s;;${DSOSUF_VERSION};g
  1692. /@ENVOPTS@/s;;${ENVOPTS};g
  1693. /@FILLORDER@/s;;${FILLORDER};g
  1694. /@GCOPTS@/s;;${GCOPTS};g
  1695. /@INSTALL@/s;;${INSTALL};g
  1696. /@LIBJPEG@/s;;`relativize ${LIBJPEG}`;g
  1697. /@LIBGL@/s;;${LIBGL};g
  1698. /@LIBGZ@/s;;`relativize ${LIBGZ}`;g
  1699. /@LIBSRCDIR@/s;;${LIBSRCDIR};g
  1700. /@LIBIMAGE@/s;;${LIBIMAGE};g
  1701. /@LIBCOPTS@/s;;${LIBCOPTS};g
  1702. /@LIBPORT@/s;;${LIBPORT};g
  1703. /@LN@/s;;${LN};g
  1704. /@LN_S@/s;;${LN_S};g
  1705. /@MACHDEPLIBS@/s;;${MACHDEPLIBS};g
  1706. /@MANAPPS@/s;;${MANAPPS};g
  1707. /@MANAPPNAME@/s;;${MANAPPNAME};g
  1708. /@MANLIBNAME@/s;;${MANLIBNAME};g
  1709. /@MANCVT@/s;;${MANCVT};g
  1710. /@MANSEDLOCAL@/s;;${MANSEDLOCAL};g
  1711. /@MANLIB@/s;;${MANLIB};g
  1712. /@MV_F@/s;;${MV_F};g
  1713. /@PORT@/s;;${PORT};g
  1714. /@PORTFUNCS@/s;;${PORTFUNCS};g
  1715. /@RANLIB@/s;;${RANLIB};g
  1716. /@SCRIPT_SH@/s;;${SCRIPT_SH};g
  1717. /@SED@/s;;${SED};g
  1718. /@SETMAKE@/s;;${SETMAKE};g
  1719. /@SRCDIR@/s;;${SRCDIR};g
  1720. /@RELSRCDIR@/s;;`relativize ${SRCDIR}`;g
  1721. /@STRIP@/s;;${STRIP};g
  1722. /@TARGET@/s;;${TARGET};g
  1723. /@VERSION@/s;;${VERSION};g
  1724. /@VERSIONFILE@/s;;`relativize ${VERSIONFILE}`;g
  1725. /@WARNING@/s;;Warning, this file was automatically created by the TIFF configure script;g
  1726. EOF
  1727.  
  1728. SedConfigFiles()
  1729. {
  1730.     for F do
  1731.     test -f $SRCDIR/$F.in || {
  1732.         bitch "$SRCDIR/$F.in is missing; this should be part of the distribution."
  1733.         boom
  1734.     }
  1735.     dir=`echo $F | $SED 's;/[^/]*$;;'`
  1736.     if [ $dir != $F ] && [ ! -d $dir ]; then
  1737.         Note "Creating $dir directory"
  1738.         mkdir $dir
  1739.     fi
  1740.     suffix=`echo $F | $SED 's/.*\.//'`
  1741.     if [ "$suffix" = h ]; then
  1742.         #
  1743.         # Compare old and new versions so that include files
  1744.         # are only updated when something has changed--this
  1745.         # saves time for subsequent makes.  Note we screen
  1746.         # out use of @DATE@ 'cuz otherwise that'll mess up
  1747.         # the comparison (this assumes dates are used in lines
  1748.         # of the form DATE: @DATE@).
  1749.         #
  1750.         $RM $F.new; $SED -f confsed $SRCDIR/$F.in > $F.new
  1751.         $RM confx; $SED '/DATE:/d' $F.new >confx
  1752.         $RM confy; $SED '/DATE:/d' $F >confy 2>/dev/null
  1753.         if cmp -s confx confy >/dev/null 2>&1; then
  1754.         $RM $F.new
  1755.         else
  1756.         Note "Creating $F from $SRCDIR/$F.in"
  1757.         $RM $F; mv $F.new $F; $CHMOD 444 $F
  1758.         fi
  1759.     else
  1760.         Note "Creating $F from $SRCDIR/$F.in"
  1761.         if $SED -f confsed $SRCDIR/$F.in >$F.new; then
  1762.         $RM $F; mv $F.new $F; $CHMOD 444 $F
  1763.         else
  1764.         cat 1>&2 <<EOF
  1765. Help, there was a problem crafting $F from $F.in.
  1766. The command:
  1767.  
  1768.     $SED -f confsed $SRCDIR/$F.in >$F.new
  1769.  
  1770. failed.  Aborting without cleaning up files so you can take a look...
  1771. EOF
  1772.         exit 1
  1773.         fi
  1774.     fi
  1775.     done
  1776. }
  1777.  
  1778. #
  1779. # port/install.sh is the SGI install program emulator script.
  1780. #
  1781. CONF_FILES="Makefile"
  1782. if [ $SRCDIR_IS_LIBTIFF != yes ] ; then
  1783.     CONF_FILES="$CONF_FILES
  1784.         libtiff/Makefile
  1785.         man/Makefile
  1786.         tools/Makefile
  1787.         port/install.sh
  1788.         "
  1789. fi
  1790.  
  1791. SedConfigFiles $CONF_FILES
  1792. test $PORT = yes &&           SedConfigFiles port/Makefile
  1793.  
  1794. Note "Done."
  1795.  
  1796. $RM $JUNK
  1797. exit 0
  1798.